# -*- coding:utf8 -*-
# 崔烁豪
# 时间：2021-05-17 15:21
# https://aistudio.baidu.com/aistudio/projectdetail/1181902

# 导入飞桨
import paddle

# 利用飞桨高级API vision，准备训练与验证用的数据。
# 首次执行会自动下载，再次执行不会重复下载（请允许我把这算成一句）
train_data = paddle.vision.datasets.MNIST(mode='train') # 准备训练数据
val_data =  paddle.vision.datasets.MNIST(mode='test')   # 准备验证数据
# 在C:\Users\cuishuohao\.cache\paddle\dataset\mnist\生成文件

# 直接利用飞桨高级API vision内置的LeNet模型，生成网络实例
net = paddle.vision.models.LeNet()

# 生成模型实例，便于进行后续的配置、训练和验证
model = paddle.Model(net)

# 模型训练相关配置损失计算方法，优化器和精度计算方法
model.prepare(paddle.optimizer.Adam(parameters=net.parameters()), # 优化器
              paddle.nn.CrossEntropyLoss(),                       # 损失计算方法
              paddle.metric.Accuracy())                           # 精度计算方法

# 开始模型训练
model.fit(train_data,    # 训练数据
          epochs=5,      # 训练轮数
          batch_size=32, # 一次训练使用样本数
          verbose=1)     # 可视化的模型参数。设定为1时，使用进度条的方式打印日志

# 利用第2步准备好的评价数据进行评价。
model.evaluate(val_data,  # 评价数据
               verbose=0) # 可视化的模型参数。设定为0时，不打印日志